#include "Animal.h"
/*!
    \class Animal
    \brief 表示动物的数据模型类.
    \inmodule QDocDemoTest

    该类使用Qt属性系统，提供了动物种类、年龄和体重的属性绑定功能，
    适用于QML绑定和数据展示。当属性值变化时会发出相应信号通知。
    \sa QObject
 */

/*!
    \enum Animal::Specie
    表述动物种类

    \value Lion
    狮子
    \value Tiger
    老虎
 */
Animal::Animal(QObject *parent) : QObject(parent), m_age(0), m_weight(0.0)
{
}

/*!
    \property Animal::species
    \brief 动物的种类.

    表示动物的具体种类，如"狮子"、"老虎"等。
 */
QString Animal::species() const
{
    return m_species;
}

/*!
    \property Animal::age
    \brief 动物的年龄.

    表示动物的年龄，单位为年。
    有效范围通常为0-100，超出范围的值会被接受但不保证合理性。
 */
int Animal::age() const {
    return m_age;
}

/*!
    \property Animal::weight
    \brief 动物的体重

    表示动物的体重，单位为千克。
    使用双精度浮点数存储，适合精确测量。
 */
double Animal::weight() const {
    return m_weight;
}

void Animal::setSpecies(const QString &species) {
    if (m_species != species) {
        m_species = species;
        emit speciesChanged();
    }
}

void Animal::setAge(int age) {
    if (m_age != age) {
        m_age = age;
        emit ageChanged();
    }
}

void Animal::setWeight(double weight) {
    if (!qFuzzyCompare(m_weight, weight)) {
        m_weight = weight;
        emit weightChanged();
    }
}
